package ar.edu.utn.frba.disenio.aterrizar;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import com.lanchita.AerolineaLanchita;

public class Busqueda {
	
	double impuestoAerolinea = 0.15;
	int recargoUsuario = 20;
	private String claseAsiento;
	private String ubicacionDelAsiento;
	AerolineaLanchita aerolinea = AerolineaLanchita.getInstance();
	
	public String[][] buscar(String origen, String destino, String fechaSalida) {

		List<String[]> disponibles = Arrays.asList(aerolinea.asientosDisponibles(origen, destino, fechaSalida, null, null, null));
		List<String[]> retVal = new ArrayList<String[]>();
		Iterator<String[]> iterator = disponibles.iterator();
				
		while (iterator.hasNext()) {
			String[] element = iterator.next();
			double precio = Double.parseDouble(element[1]); 
			precio = precio + (precio * impuestoAerolinea) + recargoUsuario;
			element[2] = String.valueOf(precio);
			retVal.add(element);
		}
		return retVal.toArray(new String[][] {});
	}

	public String[][] buscar(String origen, String destino, String fechaSalida, String parametroExtra1) {

		List<String[]> retVal = new ArrayList<String[]>();
		
		if (parametroExtra1.equals("Primera") || parametroExtra1.equals("Ejecutivo") || parametroExtra1.equals("Turista") ){
			if (parametroExtra1.equals("Primera")){
				this.setClaseAsiento("P");
			}
			if (parametroExtra1.equals("Ejecutivo")){
				this.setClaseAsiento("E");
			}
			if (parametroExtra1.equals("Turista")){
				this.setClaseAsiento("C");
			}
			List<String[]> predisponibles = Arrays.asList(aerolinea.asientosDisponibles(origen, destino, fechaSalida, null, null, null));
			List<String[]> disponibles = new ArrayList<String[]>();
			Iterator<String[]> iterator = predisponibles.iterator();

			while (iterator.hasNext()) {
				String[] element = iterator.next();
				if (element[2].equals(this.getClaseAsiento())) {
					disponibles.add(element);
				}
			}
			
			Iterator<String[]> iterator2 = disponibles.iterator();
					
			while (iterator2.hasNext()) {
				String[] element = iterator2.next();
				double precio = Double.parseDouble(element[1]); 
				precio = precio + (precio * impuestoAerolinea) + recargoUsuario;
				element[2] = String.valueOf(precio);
				retVal.add(element);
			}
			
		}
		if (parametroExtra1.equals("Ventana") || parametroExtra1.equals("Centro") || parametroExtra1.equals("Pasillo") ){
			if (parametroExtra1.equals("Ventana")){
				this.setUbicacionDelAsiento("V");
			}
			if (parametroExtra1.equals("Centro")){
				this.setUbicacionDelAsiento("C");
			}
			if (parametroExtra1.equals("Pasillo")){
				this.setUbicacionDelAsiento("P");
			}
			List<String[]> predisponibles = Arrays.asList(aerolinea.asientosDisponibles(origen, destino, fechaSalida, null, null, null));
			List<String[]> disponibles = new ArrayList<String[]>();
			Iterator<String[]> iterator = predisponibles.iterator();

			while (iterator.hasNext()) {
				String[] element = iterator.next();
				if (element[3].equals(this.getUbicacionDelAsiento())) {
					disponibles.add(element);
				}
			}
			
			Iterator<String[]> iterator2 = disponibles.iterator();
					
			while (iterator2.hasNext()) {
				String[] element = iterator2.next();
				double precio = Double.parseDouble(element[1]); 
				precio = precio + (precio * impuestoAerolinea) + recargoUsuario;
				element[2] = String.valueOf(precio);
				retVal.add(element);
			}
			
		}
		
		
		return retVal.toArray(new String[][] {});	
		
	}
	
	public String[][] buscar(String origen, String destino, String fechaSalida, String claseDeAsiento, String ubicacionAsiento) {
	
		List<String[]> retVal = new ArrayList<String[]>();
		if (ubicacionAsiento.equals("Ventana")){
			this.setUbicacionDelAsiento("V");
		}
		if (ubicacionAsiento.equals("Centro")){
			this.setUbicacionDelAsiento("C");
		}
		if (ubicacionAsiento.equals("Pasillo")){
			this.setUbicacionDelAsiento("P");
		}
	
		if (claseDeAsiento.equals("Primera")){
			this.setClaseAsiento("P");
		}
		if (claseDeAsiento.equals("Ejecutivo")){
			this.setClaseAsiento("E");
		}
		if (claseDeAsiento.equals("Turista")){
			this.setClaseAsiento("C");
		}
		
		List<String[]> predisponibles = Arrays.asList(aerolinea.asientosDisponibles(origen, destino, fechaSalida, null, null, null));
		List<String[]> disponibles = new ArrayList<String[]>();
		Iterator<String[]> iterator = predisponibles.iterator();

		while (iterator.hasNext()) {
			String[] element = iterator.next();
			if ((element[2].equals(this.getClaseAsiento())) && (element[3].equals(this.getUbicacionDelAsiento()))) {
				disponibles.add(element);
			}
		}
		
		Iterator<String[]> iterator2 = disponibles.iterator();
				
		while (iterator2.hasNext()) {
			String[] element = iterator2.next();
			double precio = Double.parseDouble(element[1]); 
			precio = precio + (precio * impuestoAerolinea) + recargoUsuario;
			element[2] = String.valueOf(precio);
			retVal.add(element);
		}
	
		return retVal.toArray(new String[][] {});
	}

	
	
//TIENE QUE VERIFICAR QUE SI ESTA RESERVADO, SI ES EL MISMO DNI, LO DEJE COMPRAR
	public double comprar(String unAsiento) {
		aerolinea.comprar(unAsiento);
		double precio = 0;
		
		List<String[]> disponibles = Arrays.asList(aerolinea.asientosDisponibles(null, null, null, null, null, null));
		Iterator<String[]> iterator = disponibles.iterator();

		while (iterator.hasNext()) {
			String[] element = iterator.next();
			if(element[1] == unAsiento){
				precio = Integer.parseInt(element[2]); 
				precio = precio + (precio * impuestoAerolinea) + recargoUsuario;
			}
		}
		return precio;
	}

	public void setClaseAsiento(String claseAsiento) {
		this.claseAsiento = claseAsiento;
	}

	public String getClaseAsiento() {
		return claseAsiento;
	}

	public void setUbicacionDelAsiento(String ubicacionDelAsiento) {
		this.ubicacionDelAsiento = ubicacionDelAsiento;
	}

	public String getUbicacionDelAsiento() {
		return ubicacionDelAsiento;
	}
	
}